/*
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the License, or
 *    (at your option) any later version.
 *
 *    This program is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU General Public License for more details.
 *
 *    You should have received a copy of the GNU General Public License
 *    along with this program; if not, write to the Free Software
 *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 *    2010 year
 *    Author: Michael Khromov aka MikeDM (Mike D'Morto)
 *    E-Mail: mikedmorto@gmail.com
 */

#ifndef IFACE_WRKPLUGIN_H
#define IFACE_WRKPLUGIN_H
/*
 * интерфейс плагина рабочего плагина
 */

#include <QtCore/QtPlugin>
#include <QtSql/QSqlQuery>


class TsIfaceWrkPlugin : public QObject{
public:
	virtual ~TsIfaceWrkPlugin(){};
	// метод выполняющий инициализацию плагина
        // конфигурационная строка плагина, и текущий юзер. что бы плагин знал от какого юзера мы воркаем.
        // третий параметр это указатель на список всех плагинов. служит для взаимодействия между плагинами
        virtual bool qinit(const QString & cfgstr, const QString & curruser, const QString & filebase, QList<TsIfaceWrkPlugin*> * pllist)=0;
        // главный метод работы плагина. вызывающий его основную функцию.
        // плагины  с ГУИ именно из этого метода вызывают свое главное окно.
        virtual bool qstart()=0;
        // отдаем имя для отображения
        virtual QString getName()=0;
public slots:
	// слот получения ответа от плагина бд
        virtual void slotDb(const QString & plName , int id, QSqlQuery * ret)=0;
        virtual void slotDbErr(const QString & plName , const QString & errtext)=0;
        // синхронный режим.
        virtual void slotRstartS(const QString pl_name)=0;
        // ответ положительный с данными по запросу.
        virtual void slotFinishS(const QString & plName , QSqlQuery * ret)=0;
        // ответ отрицательный с данными по ошибке
        virtual void slotFinishErrS(const QString & plName , const QString & errtext)=0;
signals:
	// сигнал запроса в базу данных
        virtual void sigQexec(const QString pl_name,const QString & fname,const QList<QVariant> & parameters)=0;
        // сигнал для записи в лог.
        virtual void sigPutLog(const QString & owner,int level,const QString & text)=0;
	virtual void sigClear(int id)=0;
        // синхронный режим.
        // первый запрос от плагина на начала синхронного режима.
        virtual void sigQstartS(const QString & pl_name)=0;
        // запрос в базу в асинхронном режиме
        virtual void sigQexecS(const QString pl_name,const QString & fname,const QList<QVariant> & parameters)=0;
        // сигнал окончания работы в синхронном режиме
        virtual void sigQstopS(const QString & pl_name)=0;

};

Q_DECLARE_INTERFACE(TsIfaceWrkPlugin,"ru.torisakura.tsifacedbplugin/1.0")
#endif
